home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Visual Basic Source Code
/
Visual Basic Source Code.iso
/
vbsource
/
realftp
/
testftp.bas
< prev
next >
Wrap
BASIC Source File
|
1997-04-20
|
18KB
|
515 lines
Attribute VB_Name = "Module1"
Option Base 1
Dim hi, lo, returncode, returncode2, savedata, strdata, strdata2 As String
Dim asciilist, receiving, isdone, isready, lastpacket As Boolean
Dim CurrentByte, totalreceived, receivesize, TotalByte As Long
Dim transferstate As Integer
Dim b(1024) As Byte
Dim ba() As Byte
Dim Elapsed, f, x, c, o As Long
Dim temp, myip, os, saveport As String
Dim ob As Byte
Dim Rate As Double
Public ftpcompleted As Integer
Private Sub Timer1_Timer()
Elapsed = Elapsed + 1
If CurrentByte > 0 And TotalByte > 0 Then
ftpcompleted = CurrentByte / TotalByte * 100
Rate = CurrentByte / Elapsed / 1000
End If
End Sub
Private Sub Winsock1_SendComplete(): isready = True: End Sub
Private Sub Winsock2_SendComplete(): isdone = True: End Sub
Private Sub Winsock1_DataArrival(ByVal bytestotal As Long)
winsock1.GetData strdata
If isready Then returncode = Left(strdata, 3)
If returncode = "221" Then savedata = strdata
If returncode = "227" Then savedata = strdata
If returncode = "150" Then savedata = strdata
End Sub
Private Sub Winsock2_DataArrival(ByVal bytestotal As Long)
transferstate = 0
If receiving Then transferstate = 1
If asciilist Then transferstate = 2
Select Case transferstate
Case 0: winsock2.GetData strdata2
Case 1: winsock2.GetData ba(): Put #1, , ba()
totalreceived = totalreceived + bytestotal
CurrentByte = CurrentByte + bytestotal
Case 2: winsock2.GetData strdata2: Write #1, strdata2
End Select
If isdone Then returncode = Left(strdata2, 3)
End Sub
Private Sub winsock2_ConnectionRequest(ByVal requestID As Long)
If winsock2.State <> sckClosed Then winsock2.Close
winsock2.Accept requestID
End Sub
Public Sub LogonSendFile(FtpAddress As String, UserName As String, Password As String, LocalFileName As String, RemoteFileName As String)
Elapsed = 0
lastpacket = False
receiving = False
winsock1.RemoteHost = FtpAddress
winsock1.RemotePort = 21
winsock1.Protocol = sckTCPProtocol
winsock1.Connect
resetwinsock:
While winsock1.State = 9
If winsock1.State <> sckClosed Then
winsock1.Close
While winsock1.State <> sckClosed: DoEvents: Wend
End If
winsock1.Connect
DoEvents
Wend
While winsock1.State <> sckConnected
If winsock1.State = 9 Then GoTo resetwinsock
DoEvents
Wend
While returncode <> "220": DoEvents: Wend
temp = winsock1.LocalIP: myip = ""
For x = 1 To Len(temp)
If Mid(temp, x, 1) = "." Then myip = myip + "," Else myip = myip + Mid(temp, x, 1)
Next x
winsock1.SendData "user " + UserName + Chr(13) + Chr(10)
While returncode <> "331": DoEvents: Wend
winsock1.SendData "pass " + Password + Chr(13) + Chr(10)
While returncode <> "230": DoEvents: Wend
'request port assignment from remote
winsock1.SendData "pasv" + Chr(13) + Chr(10)
While returncode <> "227": DoEvents: Wend
For x = 1 To 4: savedata = Right(savedata, Len(savedata) - InStr(1, savedata, ",")): Next x
savedata = Left(savedata, Len(savedata) - 3)
hi = Left(savedata, InStr(1, savedata, ",") - 1)
lo = Right(savedata, Len(savedata) - (Len(hi) + 1))
isready = False
'open data port
winsock2.LocalPort = Val(hi) * 256 + Val(lo)
winsock2.Listen
winsock1.SendData "port " + myip + "," + savedata + Chr(13) + Chr(10)
While returncode <> "200": DoEvents: Wend
winsock1.SendData "type i" + Chr(13) + Chr(10)
While returncode <> "200": DoEvents: Wend
winsock1.SendData "stor " + RemoteFileName + Chr(13) + Chr(10)
While returncode <> "150": DoEvents: Wend
While winsock2.State <> sckConnected: DoEvents: Wend
'send data to remote
'read file in 1k chunks
f = FileLen(LocalFileName)
If f > 1024 Then c = Int(f / 1024): o = f - (c * 1024) Else o = f
TotalByte = f
Open LocalFileName For Binary Access Read As #1
lastpacket = False
If f > 1024 Then
For x = 1 To c
isdone = False
Get 1, , b()
winsock2.SendData b()
CurrentByte = CurrentByte + 1024
While Not isdone: DoEvents: Wend
Next x
End If
os = ""
If o = 0 Then lastpacket = True: isdone = True
If o > 0 Then
isdone = False
For x = 1 To o
Get 1, , ob: os = os + Chr(ob)
CurrentByte = CurrentByte + 1
Next x
winsock2.SendData os
While Not isdone: DoEvents: Wend
lastpacket = True
isdone = True
End If
'close data port
If lastpacket Then
Close #1
winsock2.Close
winsock1.SendData "quit" + Chr(13) + Chr(10)
While returncode <> "221": DoEvents: Wend
winsock1.Close
While winsock1.State <> sckClosed: DoEvents: Wend
While winsock2.State <> sckClosed: DoEvents: Wend
CurrentByte = 0
TotalByte = 0
Elapsed = 0
End If
End Sub
Public Sub LogonGetFile(FtpAddress As String, UserName As String, Password As String, LocalFileName As String, RemoteFileName As String)
receiving = True
Elapsed = 0
winsock1.RemoteHost = FtpAddress
winsock1.RemotePort = 21
winsock1.Protocol = sckTCPProtocol
winsock1.Connect
resetwinsock:
While winsock1.State = 9
If winsock1.State <> sckClosed Then
winsock1.Close
While winsock1.State <> sckClosed: DoEvents: Wend
End If
winsock1.Connect
DoEvents
Wend
While winsock1.State <> sckConnected
If winsock1.State = 9 Then GoTo resetwinsock
DoEvents
Wend
While returncode <> "220": DoEvents: Wend
temp = winsock1.LocalIP: myip = ""
For x = 1 To Len(temp)
If Mid(temp, x, 1) = "." Then myip = myip + "," Else myip = myip + Mid(temp, x, 1)
Next x
winsock1.SendData "user " + UserName + Chr(13) + Chr(10)
While returncode <> "331": DoEvents: Wend
winsock1.SendData "pass " + Password + Chr(13) + Chr(10)
While returncode <> "230": DoEvents: Wend
winsock1.SendData "pasv" + Chr(13) + Chr(10)
While returncode <> "227": DoEvents: Wend
For x = 1 To 4: savedata = Right(savedata, Len(savedata) - InStr(1, savedata, ",")): Next x
savedata = Left(savedata, Len(savedata) - 3)
hi = Left(savedata, InStr(1, savedata, ",") - 1)
lo = Right(savedata, Len(savedata) - (Len(hi) + 1))
isready = False
winsock2.LocalPort = Val(hi) * 256 + Val(lo)
winsock2.Listen
winsock1.SendData "port " + myip + "," + savedata + Chr(13) + Chr(10)
While returncode <> "200": DoEvents: Wend
winsock1.SendData "type i" + Chr(13) + Chr(10)
While returncode <> "200": DoEvents: Wend
buffer = ""
totalreceived = 0
Open LocalFileName For Binary Access Write As #1
c = 0
winsock1.SendData "retr " + RemoteFileName + Chr(13) + Chr(10)
While returncode <> "150": DoEvents: Wend
savedata = Mid(savedata, InStr(1, savedata, "(") + 1, InStr(1, savedata, ")") - InStr(1, savedata, "(") - 7)
receivesize = Val(savedata)
bytestotal = receivesize
While winsock2.State = sckConnected: DoEvents: Wend
If winsock2.State <> sckConnected Then
Close #1
winsock2.Close
winsock1.SendData